#ifndef _CULLERS_H_
#define _CULLERS_H_

#include <memory>

namespace SEngine
{

    template<typename T>
    class Cullers 
    {
    public:
        enum Type {
            InSide = 0,
            Intersect,
            OutSide,
        };
    public:
        Cullers(T & body) : m_body(body) {}
        virtual ~Cullers() = default;
        template<typename U>
        Type Collide(U & shape) { static_assert(false, "Type U is not impl!"); }
    private:
        T m_body;
    };

} // namespace SEngine

#include <SEMath/Shapes/Frustum.h>
#include <SEMath/Shapes/AABB.h>

namespace SEngine
{
    template<>
    template<>
    Cullers<PerspectiveFrustum>::Type Cullers<PerspectiveFrustum>::Collide<AABB>(AABB & shape)
    {
        
        return InSide;
    }
} // namespace SEngine


#endif